﻿// FluentViewModel (http://fluentviewmodel.codeplex.com/)
//
// Copyright © 2010 Kialco Group 
//
// The contents of this file are subject to the Mozilla Public
// License Version 1.1 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of
// the License at http://www.mozilla.org/MPL/
// 
// Software distributed under the License is distributed on an 
// "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
// implied. See the License for the specific language governing
// rights and limitations under the License.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Markup;

namespace FluentViewModel
{
    [MarkupExtensionReturnType(typeof(UIElement))]
    public sealed class ViewModelActivator : MarkupExtension
    {
        public Type Type { get; set; }

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (IsDesignTime())
                return null;
            if (ServiceLocator.Current == null)
                return null;
            return ServiceLocator
                .Current
                .Resolve(Type);
        }

        private static bool IsDesignTime()
        {
            return DesignerProperties.GetIsInDesignMode(new DependencyObject());
        }
    }
}